var express = require('express')
var router = express.Router()

// 导入jwt包
const jwt = require('jsonwebtoken')
// 定义统一的加密密钥
const secretKey = 'guanggu'

const { getAll, getById, exec } = require('../db')

// 设置一个校验路由,前端每一次切换页面都会访问这个路由
// 校验token是否过期
router.post('/', async (req, res) => {
  // 拿到请求头里的token
  let rawtoken = req.headers.authorization
  // console.log(rawtoken)
  if (!rawtoken) {
    res.send({
      code: 408,
      msg: 'token is null',
    })
    return
  }
  rawtoken = rawtoken.split(' ').pop()
  // console.log('houtai' + rawtoken)
  jwt.verify(rawtoken, secretKey, async (err, decodetoken) => {
    // console.log(err)
    if (err) {
      // 如果err存在说明token 失效了
      res.send({
        code: 405,
        msg: 'token is expired!',
      })
    } else {
      // 如果token没有失效，则需要提取decodetoken中的用户对象，与数据库中的进行比对
      // 这一步是为了避免token虽然没过期，但是用户名和对象被篡改了！
      // console.log(decodetoken)
      // //{ username: '小张', password: '555', iat: 1656745242, exp: 1656745252 }
      const { username, password } = decodetoken
      // console.log(username, password + 'successful')
      let sqlusername = `select * from gg_user where user_name = '${username}'`
      const data1 = await exec(sqlusername)
      if (data1 == false) {
        // 用户名不存在,则发送提示信息
        res.send({
          code: 401,
          msg: '该用户不存在',
          result: data1,
        })
        return
      }
      // 用户名存在则校验密码
      if (data1[0]['user_password'] != password) {
        // 如果输入的密码与数据库的密码不匹配
        res.send({
          code: 402,
          msg: '密码不正确',
          result: data1,
        })
        return
      }
      // console.log(data1[0])
      res.send({
        code: 0,
        msg: 'token is available!',
        result: {
          userid: data1[0].user_id,
          username: data1[0].user_name,
          usertype: data1[0].user_type,
          online: data1[0].user_onlinestatus,
        },
      })
    }
  })
})

module.exports = router
